/**
 * http请求拦截器封装
 * @param Vue
 * @param vm
 * @author zhp
 * @url /common/http.interceptor.js
 */
// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token变量
import store from '../store';
import {
	HTTP_REQUEST_URL
} from '@/config/app';
import app from '@/main'


// const store.state.version2 = '1.4.0';

const install = (Vue, vm) => {
	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: HTTP_REQUEST_URL,
		loadingText: 'loading...',
		method: 'POST',
		dataType: 'json', // 设置为json，返回后会对数据进行一次JSON.parse()
		showLoading: false, // 是否显示请求中的loading
		loadingTime: 1000, // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms
		originalData: true, // 是否在拦截器中返回服务端的原始数据
		loadingMask: true, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透
		// 配置请求头信息
		header: {
			'content-type': 'application/json;charset=UTF-8'
		},
	});

	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		// 登录判断
		if (config.data.needLogin === true) {
			const token = uni.getStorageSync('xzdToken');
			const mobile = uni.getStorageSync('mobile');
			// 获取token
			if (!token || !mobile) {
				// vm.$u.toast(app.$i18n.t('请先登录'));
				// setTimeout(() => {
				//     // 此为uView的方法，详见路由相关文档
				//     vm.$u.route('/pages/user/login/login')
				// }, 1000)
				// return false; // 取消本次请求
			}
			config.header.xzdToken = token;
		} else {
			// 默认不需要登录
			config.header.xzdToken = '';
		}
		const lang = uni.getStorageSync('lang');
		const startPage = uni.getStorageSync('startPage');
		if (!lang && startPage) {
			vm.$u.route({
				url: '/pages/tabbar/startPage/language'
			})
			return
		}
		config.data.lang = lang
		config.data.version = store.state.version;



		uni.setStorage({
			key: 'version',
			data: store.state.version
		})
		uni.setStorageSync('version', store.state.version)

		return config;
	}

	// 响应拦截，判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {
		if (res.data.code == 1) {
			// console.log('success-res', res)
			// res为服务端返回值，可能有code，result等字段
			// 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
			// 如果配置了originalData为true，请留意这里的返回值
			return res.data.data;
		} else if (res.data.code == 201) {
			console.log('needLogin', res.data)
			vm.$u.toast(app.$i18n.t('请先登录'));
			uni.clearStorage();
			uni.clearStorageSync();

			uni.setStorage({
				key: 'version',
				data: store.state.version
			})
			uni.setStorageSync('version', store.state.version)

			setTimeout(() => {
				// 此为uView的方法，详见路由相关文档
				vm.$u.route('/pages/user/login/login')
			}, 1000)
			// return false;
		} else {
			if (res.data.msg === '5555') {
				return false;
			} else {
				//vm.$u.toast()

				uni.showModal({
					content: app.$i18n.t(res.data.msg),
					showCancel: false,
					confirmText: app.$i18n.t('是'),
				})

				// 如果返回false，则会调用Promise的reject回调，
				// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
				return false;
			}

		}
	}
}

export default {
	install
}